package com.tedu.API.list;

import org.junit.Test;

import javax.swing.*;
import java.util.ArrayList;
import java.util.Collection;

/**
 * 存放很多相同的数据---数组    存989个数据
 * int[] i=new int[989];   要求：定长，类型固定
 * 需求：存989个数据，而且数据不相同  当我们的需求中，存在数量不确定，类型也不确定，使用集合保存数据
 * <p>
 * <p>
 * 集合：存放相同【不相同】的数据的容器，使用功能与数组类似，保存一组数据
 * <p>
 * 包位置： java.util
 * Collection【接口】 顶级集合  容器
 * 作用：使用集合顶级集合，规定使用集合的会的方法
 * <p>
 * Collection【接口】 可以创建对象 ---多态创建顶级集合
 * Collection 引用=new ArrayLis();     爷爷类=孙子类--继承关系--多态
 * List子接口 【继承Collection接口】 ：可以存重复的元素，并且有序
 * ArrayList实现类【继承List接口】 ：理解为数组，数组定长，ArrayList不定长
 *  LinkedList实现类【继承List接口】
 * Set子接口【继承Collection接口】
 */
public class CollectionAPI {
    @Test
    public void testCollection() {
        //创建顶级集合【容器】
        Collection c = new ArrayList();
        /**
         *
         * add(Object o)方法 返回值 boolean  存入成功返回true
         * 作用：向当前集合添加元素，元素可以为任意的
         *
         */
        c.add("字符串");
        c.add(1);
        c.add(1);
        c.add(122.12);
        c.add(new JFrame());
        System.out.println("打印集合" + c);
        /**
         * remove(Object o)方法 返回值 boolean
         * 作用：删除给定的元素，只会删除第一个元素
         * 需求：删除c集合，删除元素为1的内容
         * 底层：采用equals方法进行对比，移除内容相等移除，不相等不操作
         */
        c.remove(1);
        System.out.println("删除后的集合" + c);
        /**
         * size()方法  返回值int
         * 作用：获取集合当中的元素个数----数组存在length,获取数组的长度
         *
         */
        int i = c.size();
        System.out.println("集合的个数" + i);
        /**
         * clear() 方法   返回值 void
         * 作用：清空集合
         * isEmpty()方法  返回值 boolean
         * 作用：返回集合的元素  有元素false 无元素 true
         *
         */
        c.clear();
        boolean b = c.isEmpty();
        System.out.println("集合中是否有元素" + b);

    }

    /**
     * addAll(Collection o) 并集
     * 作用：将给定的集合当中所有的元素添加至当前集合，添加成功返回true,否则false
     * 返回值 boolean
     */
    @Test
    public void testAddAll() {
        Collection c1 = new ArrayList();
        c1.add("java");
        c1.add("net");
        c1.add("go");
        Collection c2 = new ArrayList();
        c2.add("c");
        c2.add("java");
        c2.add("php");
        boolean b = c1.addAll(c2);   //将c2添加给c1
        System.out.println("并集结果 " + c1 + b);
    }
    /**
     * contains()方法  返回值：boolean
     * 作用:判断当前集合是否包含给定元素,包含返回true
     *containsAll()  返回值 boolean
     * 作用：判断当前集合是否包含给定集合中的所有元素
     *    当前集合.containsAll(给定集合)
     * 注意：判断所有集合一致 返回:true
     *      判断集合包含给定集合元素，元素存在  返回:true
     *      当前集合不包含给定元素，元素不存在  返回：false
     *      总结：containsAll,个数不参考，不参考存入顺序，不参考元素数据是否一致
     */
    @Test
    public void testContains(){
        Collection c1 = new ArrayList();
        c1.add("java");
        c1.add("net");
        c1.add("go");

        Collection c2 = new ArrayList();
        c2.add("c");
        c2.add("java");

        boolean b1=c1.containsAll(c2);
        System.out.println("c1是否包含c2"+b1);
        //判断集合当中，是否存在java元素
        boolean b=c1.contains("java");
        System.out.println("判断c1是否存在java元素"+b);

    }
    /**
     * removeAll()方法   返回值:boolean
     * 作用：删除当前集合中与给定集合中的共有元素
     *
     */
    @Test
    public void testRemoveAll() {
        Collection c1 = new ArrayList();
        c1.add("1");
        c1.add("2");
        c1.add("3");
        Collection c2 = new ArrayList();
        c2.add("3");
        c2.add("3");
        c2.add("3");
        boolean b = c1.removeAll(c2); //c1减c2
        System.out.println("c1是否删除c2的元素" + b);//true
        System.out.println("c1交集集合：" + c1); //[]
    }

}
